<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>

<body>
  <script>
    // 原型prototype   原型是每个函数都有的属性  可以共享属性和方法  可以完成继承




    //原型链__proto__  每个对象都有的属性  指向上层构造的原型prototype 
    // 任何函数都有原型对象,也就是prototype属性,任何原型对象也是一个对象,该对象就有__proto__属性,这样一层一层往上找,就形成了一条链,我们称此为原型链;
    // function Object() { }
    // Object.prototype
    var obj = {
      name: 1,
      age: 2
    }
    console.log(obj)
    // 
    // obj.__proto__=Object.prototype
    // constructor 构造器  对象.constructor==构造器名称  返回true和false
    console.log(obj.constructor === Object)
    // 构造函数
    function Car(name, color) {
      this.name = name;
      this.color = color;
    }
    Car.prototype.lun = 4;
    Car.prototype.run = function () {
      console.log(1)
    }

    var benchi = new Car("奔驰", "红色")
    console.log(benchi)
    var bmw = new Car("宝马", "白色")
    console.log(bmw)
    console.log(benchi.__proto__ == Car.prototype)
    //原型链  每个对象都有的属性  指向上层构造的原型prototype 属性， 最终指向null
    console.log(benchi.__proto__) // Car.prototype
    console.log(benchi.__proto__.__proto__)//Object.prototype
    console.log(benchi.__proto__.__proto__.__proto__) //null 




  </script>
</body>

</html>